package done.easy_801_900;

import org.junit.Test;

import static com.study.util.LogUtil.info;
import static com.study.util.SwapUtil.swap;

/**
 * 859. Buddy Strings 亲密字符串
 * <p>
 * 给定两个由小写字母构成的字符串 A 和 B ，
 * 只要我们可以通过交换 A 中的两个字母得到
 * 与 B 相等的结果，就返回 true ；否则返回 false 。
 * <p>
 * 示例 1：
 * 输入： A = "ab", B = "ba"
 * 输出： true
 * 示例 2：
 * 输入： A = "ab", B = "ab"
 * 输出： false
 * 示例 3:
 * 输入： A = "aa", B = "aa"
 * 输出： true
 * 示例 4：
 * 输入： A = "aaaaaaabc", B = "aaaaaaacb"
 * 输出： true
 * 示例 5：
 * 输入： A = "", B = "aa"
 * 输出： false
 * 2019-04-13 9:11 AM
 **/
@SuppressWarnings("all")
public class BuddyStrings {

    public boolean buddyStrings(String A, String B) {
        // 190413 first
        return false;
    }

    @Test
    public void test() {
        info("true -> {}", buddyStrings("ab", "ba"));
        info("false -> {}", buddyStrings("ab", "ab"));
        info("true -> {}", buddyStrings("aa", "aa"));
        info("true -> {}", buddyStrings("aaaaaaabc", "aaaaaaacb"));
        info("false -> {}", buddyStrings("", "aa"));
    }
}














































/*
public boolean buddyStrings(String A, String B) {
    if (A.length() != B.length())
        return false;

    char[] arr = A.toCharArray();

    // NO.1 如果A B相等  判断A中是否有重复字母
    if (A.equals(B)) {
        Set<Character> set = new HashSet<>();
        for (int k = 0; k < A.length(); k++) {
            if (!set.add(arr[k])) {
                return true;
            }
        }
        return false;
    }

    // NO.2 如果A B 不同
    // 将A中ab不同的位置 交换
    // 最后看A是否等于B
    int i, j;
    for (i=0; i < A.length(); i++) {
        if (arr[i] != B.charAt(i))
            break;
    }

    for (j = A.length() - 1; j >=0; j--) {
        if (arr[j] != B.charAt(j))
            break;
    }

    // 找到了两个不同的位置
    // 交换一次看看是否还想等
    if (i != j) {
        swap(arr, i, j);
        return B.equals(new String(arr));
    }
    return false;
}
*/
